package com.tim.framework.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class StringUtil {
	/**
	 * 转换字符串第一个字符为大写.
	 * 
	 * @param str
	 *            需要转换的字符串.
	 * @return String 首字母大写的字符串.
	 */
	public static String convertFirstCharToUpper(String str) {
		char first = Character.toUpperCase(str.charAt(0));
		return first + str.substring(1);
	}

	/**
	 * 转换字符串第一个字符为小写.
	 * 
	 * @param str
	 *            需要转换的字符串.
	 * @return String 首字母小写的字符串.
	 */
	public static String convertFirstCharToLower(String str) {
		char first = Character.toLowerCase(str.charAt(0));
		return first + str.substring(1);
	}

	/**
	 * 通过正则表达式获取字符串内容. eg:getStringFromPattern("abcdef", "a(.*)f")获取bcde;
	 */
	public static String getStringFromPattern(String content, String patternStr) {
		try {
			Pattern pattern = Pattern.compile(patternStr,
					Pattern.CASE_INSENSITIVE | Pattern.DOTALL
							| Pattern.UNIX_LINES);
			Matcher mt = pattern.matcher(content);
			if (mt != null && mt.find()) {
				String value = mt.group(1);
				return value;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public static List<String> getListFromPattern(String content,
			String patternStr) {
		try {
			Pattern pattern = Pattern.compile(patternStr,
					Pattern.CASE_INSENSITIVE | Pattern.DOTALL
							| Pattern.UNIX_LINES);
			Matcher mt = pattern.matcher(content);
			if (mt != null) {
				List<String> list = new ArrayList<String>();
				while (mt.find()) {
					String value = mt.group(1);
					list.add(value);
				}
				return list;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 替换敏感词.
	 * 
	 * @param content
	 *            被检测内容.
	 * @param sensitivity
	 *            敏感词.
	 */
	public static String replaceSensitivity(String content, String sensitivity) {
		StringBuilder expr = new StringBuilder("");
		for (int i = 0; i < sensitivity.length(); i++) {
			expr.append(sensitivity.charAt(i) + "\\s*");
		}
		Pattern pattern = Pattern.compile(expr.toString());
		Matcher matcher = pattern.matcher(content);
		return matcher.replaceAll("***");
	}

	/**
	 * 转换字符串入文件.
	 * 
	 * @param content
	 *            文件内容.
	 * @param path
	 *            文件路径.
	 * @return boolean 是否转换成功.
	 */
	public static boolean convertToFile(String content, String path) {
		File file = new File(path);
		File parent = file.getParentFile();
		if (!parent.exists()) {
			parent.mkdirs();
		}
		try {
			file.createNewFile();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return convertToFile(content, file);
	}

	/**
	 * 将指定内容写入指定文件.
	 * 
	 * @param content
	 *            文件内容.
	 * @param file
	 *            文件.
	 * @return boolean 是否写入成功.
	 */
	public static boolean convertToFile(String content, File file) {
		try {
			OutputStream fos = new FileOutputStream(file);
			fos.write(content.getBytes());
			fos.flush();
			fos.close();
			return true;
		} catch (Exception e) {
			return false;
		}
	}

	/**
	 * 以指定字符集方式加载指定文件为字符串.
	 * 
	 * @param filePath
	 *            文件完整路径.
	 * @param encoding
	 *            字符集.
	 * @return String 文件字符串内容.
	 */
	public static String fileToString(String filePath, String encoding) {
		File file = new File(filePath);
		return fileToString(file, encoding);
	}

	/**
	 * 以指定字符集方式加载指定文件为字符串.
	 * 
	 * @param file
	 *            指定文件.
	 * @param encoding
	 *            字符集.
	 * @return String 文件内容.
	 */
	public static String fileToString(File file, String encoding) {
		if (file.exists()) {
			try {
				FileInputStream inputStream = new FileInputStream(file);
				byte[] data = new byte[inputStream.available()];
				inputStream.read(data);
				return new String(data, encoding);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return "";
	}

	/**
	 * 以UTF-8方式加载指定文件为字符串.
	 * 
	 * @param file
	 *            指定文件.
	 * @param encoding
	 *            字符集.
	 * @return String 文件内容.
	 */
	public static String fileToString(File file) {
		return fileToString(file, "UTF-8");
	}

	/**
	 * 以UTF-8方式加载指定文件为字符串.
	 * 
	 * @return String 文件字符串内容.
	 */
	public static String fileToString(String filePath) {
		return fileToString(filePath, "UTF-8");
	}
	
	public static void main(String[] args) {
		List<String> strList = getListFromPattern("C:/program file/adobe/flex/sdks/4.6", "/(.*?)/");
		System.out.println(strList.size());
	}
}
